נתונות שלוש אותיות a,b,c כל אחת קיימת A,B,C פעמים. כתוב אלגוריתם הבונה מחרוזת כמה שיותר ארוכה מהאותיות הקיימות כך שאף אות לא חוזרת על עצמה ברצף יותר מפעמיים. למשל A=1,B=0,C=5 יוציא ccacc.
יש 9 מטבעות כאשר ל8 משקל שווה ורק לאחד מהם משקל קל יותר. איך אפשר תוך 2 שקילות בלבד לדעת מי המטבע עם המשקל השונה?
תשובות
הוסף תשובה
|
לצפיה בתשובות
ספטמבר 2021
מחלקים את 9 המטבעות ל3 קבוצות שבכל קבוצה 3 מטבעות ובשקילה הראשונה שוקלים 2 שלישיות. אם משקלן זהה אז אנחנו יודעים שהמטבע עם המשקל המיוחד בשלישייה השלישית. אם משקל אחת השלישות נמוך מהשנייה אז נדע שהמטבע בשלישיה עם המשקל הנמוך יותר. עכשיו נשקול 2 מטבעות מתוך השלישייה שאנו ייודעים שבה נמצא המפתח. אם שני המפתחות באותו המשקל נדע שהשלישי הוא הקל. ואם יש אחד קל ואחד כבר אז הקל מבניהם הוא המטבע הקל.
נובמבר 2021
נקח מתוך 6 מטבעות מתוך 9 כלומר 3 מטבעות נשארים בצד.
נשקול את שש המטבעות כאשר נחלק אותם שווה בשווה 3 בכל צד.
אם הם שווים -> נחזור ל3 מטבעות בצד ונמדוד שניהם מהם בכל צד (אם הם שווים אז המטבע שנשאר לבד מזויף אחרת נראה במשקל מי מזויף)
אם הם לא שווים -> נלך לחלק שלא שווה ונבצע שקילה נוספת אך נשים מטבע אחד כל צד משלושת המטבעות וישר נבחין מי המטבע המזויף (דומה למקרה של המטבעות הראשונות שהשארנו בצד)
Codility skills test for 80 minutes, then a skype interview for 30 minutes
שאלות מתוך הראיון
nine stones one of them is slightly heavier than the others, how can you find the heavy one using a scale only twice?
תשובות
הוסף תשובה
|
לצפיה בתשובות
יולי 2021
split the stones to 3 piles (each has 3 stones), scale two piles on the scale, if they're equal, take two stones from the 3rd pile and scale them, if they're equal it's the 3rd stone from that pile. Otherwise do the same task on the heavy pile which were measured first.
חיפשו לראות הבנה כללית וידע במבני נתונים וסיבוכיות
שאלות מתוך הראיון
לממש alloc() ו- free()
תשובות
הוסף תשובה
|
לצפיה בתשובות
מאי 2021
מגדירים מבנה של מטהדאטא שמאפיין בלוק של זיכרון (להלן: הדר). בלוק יכול להיות מוקצה או משוחרר, ומכיל מצביע לבלוק הבא (שבתורו, יכול להיות מוקצה או משוחרר).
במימוש לדוגמא אפשר להקצות בשיטת first fit, ובמעבר לינארי על רשימת הבלוקים למצוא את הבלוק הראשון הפנוי שגדול מספיק.
malloc: במעבר על הרשימה המקושרת של ההדרים, מחפשים בלוק פנוי מספיק גדול ומסמנים אותו כ"תפוס" בהדר. ליוזר נחזיר מצביע לזיכרון עצמו שנמצא ברצף אחרי ההדר. אם מצאנו בלוק גדול יותר מהבלוק המבוקש אז נקרא לפונקציה split שיודעת לפצל בלוק גדול קיים לשני בלוקים קטנים (אחד עבור היוזר שביקש הקצאה, והשני עבור שאר הזיכרון הפנוי שנשאר כשארית).
free: נסמן את הבלוק כפנוי ונקרא לפונקציה merge שיודעת לאחד בלוקים פנויים עוקבים.
שיטה יותר טובה למימוש היא Best fit, ובשיטה זו נחפש את הבלוק הגדול מספיק הכי קטן. כמו כן, בכל מימוש שלא כולל relocation של בלוקים, עשויה להיות בעיה של External Fragmangtation כלומר, יוזר עשוי לבקש בלוק ויהיה מספיק זיכרון פנוי אבל לא ברצף ולכן ההקצאה תיכשל.
עוסקת בפיתוח, תכנות, שיווק ומתן זיכיונות למערכות הפעלה למחשבים, פתרונות תוכנה למגזר הפרטי והעסקי ומגוון פלטפורמות משולבות חומרה ותוכנה. בתחום המוצרים ללקוחות משווקת החברה מערכות הפעלה לשרתים, מחשבים אישיים ומחשבי כף יד.